#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
PyAutoGUI 基础演示脚本
---------------------------------
功能包含：
1) 安全倒计时（给你切回目标窗口时间）
2) 鼠标移动与点击
3) 文本输入
4) 屏幕截图保存
5) 在屏幕上查找图片并点击（模板匹配）
6) 滚动与拖拽示例

使用前：
- pip install pyautogui pillow
- 将你要查找/点击的目标控件截图保存为 images/target.png（可选）
- 运行脚本前先把目标应用窗口放在前台；脚本会给你 3 秒倒计时

注意：
- 将鼠标移动到屏幕左上角(0,0)可紧急停止 (pyautogui.FAILSAFE)
- 每一步之间默认暂停 0.2 秒 (pyautogui.PAUSE)
"""

import os
import time
from pathlib import Path

import pyautogui as pag

# ===== 全局安全设置 =====
pag.FAILSAFE = True
pag.PAUSE = 0.2

ROOT = Path(__file__).resolve().parent
IMG_DIR = ROOT / "images"
IMG_DIR.mkdir(exist_ok=True)


def safe_countdown(sec: int = 3, text: str = "切回目标窗口..."):
    """给用户几秒钟时间切回到目标窗口"""
    for i in range(sec, 0, -1):
        print(f"[{i}] {text}")
        time.sleep(1)


def demo_move_and_click():
    print(">> 鼠标移动到屏幕中央并单击")
    w, h = pag.size()
    pag.moveTo(w // 2, h // 2, duration=0.6)  # 平滑移动到中心
    pag.click()  # 左键单击


def demo_type_text():
    print(">> 在当前焦点位置输入文本")
    pag.typewrite("Hello from PyAutoGUI! 你好，PyAutoGUI！", interval=0.05)
    pag.press("enter")


def demo_screenshot():
    print(">> 全屏截图到 screenshots/ 目录")
    # ss_dir = ROOT / "screenshots"
    # ss_dir.mkdir(exist_ok=True)
    # fname = ss_dir / f"screenshot_{int(time.time())}.png"
    pag.screenshot(f"screenshots/screenshot_{int(time.time())}.png")
    # print(f"已保存: {fname}")


def demo_locate_and_click():
    """
    在屏幕上查找 images/target.png，并点击其中心。
    提示：把你想点击的按钮/图标截图存成 images/target.png。
    """
    target_path = "images/target.png"
    if not os.path.exists(target_path):
        print(f"未找到 {target_path}，请先准备一张小图片用于匹配。")
        return

    print(">> 在屏幕上查找 target.png ...（可能需要几秒）")
    print(target_path)
    # confidence 需要 OpenCV；若未安装，可去掉该参数降低鲁棒性
    try:
        box = pag.locateOnScreen(target_path, confidence=0.85)
    except TypeError:
        # 没有opencv-python时，locateOnScreen不支持confidence
        box = pag.locateOnScreen(str(target_path))

    if box:
        center = pag.center(box)
        print(f"找到目标，位置: {box}，点击中心点: {center}")
        pag.moveTo(center.x, center.y, duration=0.4)
        pag.click()
    else:
        print("未在屏幕上找到目标图片。")


def demo_scroll_and_drag():
    print(">> 滚动 800 像素（向下为负数，向上为正数）")
    pag.scroll(-800)
    time.sleep(0.5)

    print(">> 拖拽演示：从屏幕 30% 宽 × 50% 高 拖到 70% 宽 × 50% 高")
    w, h = pag.size()
    x1, y1 = int(w * 0.3), int(h * 0.5)
    x2, y2 = int(w * 0.7), int(h * 0.5)
    pag.moveTo(x1, y1, duration=0.4)
    pag.dragTo(x2, y2, duration=0.6, button="left")


def main():
    print("=== PyAutoGUI Demo ===")
    print("安全提示：将鼠标移到屏幕左上角可立刻终止脚本。")
    safe_countdown(3)

    # 1) 鼠标移动与点击
    # demo_move_and_click()

    # 2) 文本输入（确保某个输入框/聊天框已聚焦）
    # demo_type_text()

    # 3) 全屏截图
    demo_screenshot()

    # Hello from PyAutoGUI! PyAutoGUI
    # 4) 查找图片并点击（需要 images/target.png）
    # demo_locate_and_click()

    # 5) 滚动与拖拽
    # demo_scroll_and_drag()

    print("全部演示完成！")


if __name__ == "__main__":
    main()
